package cn.edu.ecut.test;

import cn.edu.ecut.entity.Student;
import com.mozicoding.jdbc.DatabaseType;
import com.mozicoding.jdbc.JdbcHelper;
import com.mozicoding.jdbc.RowMapper;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDate;
import java.util.List;

/**
 * 测试查询操作(执行可能返回多条记录的SQL语句)
 */
public class JdbcHelperTest5 {

    public static void main(String[] args) {

        // 1、获得 JdbcHelper 实例
        JdbcHelper helper = JdbcHelper.getInstance( DatabaseType.MYSQL );

        // 2、编写查询语句
        String select = "SELECT id , login_name , password , name , gender , date_of_birth FROM t_students ORDER BY id ASC" ;

        // 3、创建 RowMapper 对象
        RowMapper<Student> mapper = new RowMapper<Student>() { // 使用 匿名类 实现了RowMapper接口
            @Override
            public Student wrap(ResultSet rs) throws SQLException {
                Student s = new Student();// 创建Student对象

                int sid = rs.getInt( "id") ; // 从结果集对象(rs)的当前行获取 id 列的值
                s.setId( sid ); // 为Student对象设置id (将sid的值存储到Student实例的实例变量中)

                String loginName = rs.getString( "login_name" ); // 从结果集对象(rs)的当前行获取 login_name 列的值
                s.setLoginName( loginName );

                String password = rs.getString( "password" ); // 从结果集对象(rs)的当前行获取 password 列的值
                s.setPassword( password );

                String name = rs.getString( "name" ); // 从结果集对象(rs)的当前行获取 name 列的值
                s.setName( name );

                String genderString = rs.getString( "gender" ); // 从结果集对象(rs)的当前行获取 gender 列的值
                if( genderString != null && !genderString.trim().isEmpty() ){
                    char gender = genderString.charAt( 1 ) ; // 从数据库中获取到的 gender 列的值中截取第一个字符
                    s.setGender( gender );
                }

                java.sql.Date date = rs.getDate( "date_of_birth" );
                if( date != null ) {
                    LocalDate birthdate = date.toLocalDate();
                    s.setBirthdate( birthdate );
                }

                return s ; // 返回Student对象
            }
        };

        // 4、"执行"SQL语句: 发送SQL语句给数据库服务器、接收数据库服务器的返回结果
        List<Student> list = helper.list( select , mapper  ); // 如果SQL语句中没有参数占位符则只需要指定前两个参数即可

        for ( Student s : list ) {
            System.out.println( s.getId() + " , " + s.getLoginName() );
        }

        // 5、释放资源
        helper.release();

        System.out.println( (byte)131 );

    }

}
